package br.uece.comp.paa.entity;

import br.uece.comp.paa.entity.grafo.Grafo;
import br.uece.comp.paa.entity.param.Solucao;

/**
 * Implementação de Solução exaustiva para encontrar uma árvore Geradora Mínima.
 * 
 * @author juliano
 * 
 */
public class Exaustiva extends Varredura {

	private Solucao melhor;

	public Exaustiva(Grafo g) {
		super(g);

		melhor = new Solucao(0);
		melhor.setCusto(Double.MAX_VALUE);
	}

	@Override
	public Grafo gerar(Grafo g, int grauMaximo, double custoMaximo) {
		inicializarAtributos(g);
		Double custo;
		int count = 0;

		while (gerador.temProxima() && continuar) {
			System.out.println("Avaliando solução " + ++count);
			Solucao solucao = gerador.proxima();
			custo = avaliar(grauMaximo, solucao);

			if (custo != null && custo < melhor.getCusto()) {
				melhor = solucao;
			}
		}

		return getGrafo().extrairArvore(obterListaArestas(melhor));
	}
}
